package post

import (
	"context"
	model "service/model/hr"
	mCache "service/model/hr_cache"
	"service/model/mod"

	gpb "gitee.com/cloudapex/protos/hr/pb"
	gpa "gitee.com/cloudapex/protos/hr_cache/pb"

	"gitee.com/cloudapex/ulern/htp"
	"gitee.com/cloudapex/ulern/util"

	"github.com/gin-gonic/gin"
)

/*
 * 描述: 添加岗位架构
 *********************************************************************/

type PostFrameAdd struct {
	CId      int64  `form:"cId" json:"cId" binding:"required"`           //公司ID
	Leve     int64  `form:"postLeve" json:"postLeve" binding:"required"` //当前层级ID
	Superior int64  `form:"parId" json:"parId"`                          //上级ID
	Name     string `form:"postName" json:"postName" binding:"required"` //名称
	ShowId   uint64 `form:"showId" json:"showId"`                        //组织架构ID
	Order    int64  `form:"orderNum" json:"orderNum"`                    //上移下移
}

func (this *PostFrameAdd) Handle(c *gin.Context, ctx context.Context) htp.Response {

	rsp, err := model.PostFrame.AddPostFrame(ctx, &gpb.PostFraReq{
		CId:      this.CId,
		Leve:     this.Leve,
		Superior: this.Superior,
		Name:     this.Name,
		Shows:    this.ShowId,
		Order:    this.Order,
	})
	if err != nil {
		return htp.RespModelErr("", err)
	}
	if _, err := mCache.PostsCache.AddPost(ctx, &gpa.PostBaseCacheReq{
		Id:      rsp.Id,
		CId:     this.CId,
		Name:    this.Name,
		FrameId: int64(this.ShowId),
	}); err != nil {
		util.Error(err.Error())
	}
	return htp.RespOK("", &struct {
		PostId int64 `json:"postId"`
	}{rsp.Id})
}

/*
 * 描述: 删除岗位架构
 *********************************************************************/
type PostFrameDel struct {
	Id int64 `form:"postId" json:"postId"` //岗位Id
}

func (this *PostFrameDel) Handle(c *gin.Context, ctx context.Context) htp.Response {
	rsp, err := model.PostFrame.DelPostFrame(ctx, &gpb.PostFraReq{
		Id: this.Id,
	})
	if err != nil {
		return htp.RespModelErr("", err)
	}
	return htp.RespOK("", rsp.Message)
}

/*
 * 描述: 获取当前层级Id的子架构
 *********************************************************************/
type ListPostFrame PostFrameDel

func (this *ListPostFrame) Handle(c *gin.Context, ctx context.Context) htp.Response {
	jwtUser := mod.CurrUser(c)
	rsp, err := model.PostFrame.GetPostFraList(ctx, &gpb.PostFraReq{
		Superior: this.Id,
		CId:      jwtUser.CId,
	})
	if err != nil {
		return htp.RespModelErr("", err)
	}
	return htp.RespOK("", rsp)
}

/*
 * 描述:查询当前岗位信息
 *********************************************************************/
type GetPostFrame PostFrameDel

func (this *GetPostFrame) Handle(c *gin.Context, ctx context.Context) htp.Response {
	rsp, err := model.PostFrame.GetPostFrame(ctx, &gpb.PostFraReq{
		Id: this.Id,
	})
	if err != nil {
		return htp.RespModelErr("", err)
	}
	return htp.RespOK("", rsp)
}

/*
 * 描述:修改当前岗位信息
 *********************************************************************/
type PostFrameSet struct {
	Id       int64  `form:"postId" json:"postId" binding:"required"`     //岗位Id
	CId      int64  `form:"cId" json:"cId"`                              //公司ID
	Leve     int64  `form:"postLeve" json:"postLeve"`                    //当前层级ID
	Superior int64  `form:"parId" json:"parId"`                          //上级ID
	Name     string `form:"postName" json:"postName" binding:"required"` //名称
	ShowId   uint64 `form:"showId" json:"showId"`                        //组织架构ID
}

func (this *PostFrameSet) Handle(c *gin.Context, ctx context.Context) htp.Response {
	rsp, err := model.PostFrame.EditPostFrame(ctx, &gpb.PostFraReq{
		Id:       this.Id,
		CId:      this.CId,
		Leve:     this.Leve,
		Superior: this.Superior,
		Name:     this.Name,
		Shows:    this.ShowId,
	})
	if err != nil {
		return htp.RespModelErr("", err)
	}
	//删除了 不用了
	// if _, err := mCache.PostsCache.EditPost(ctx, &gpa.PostBaseCacheReq{
	// 	Id:   rsp.Id,
	// 	Name: this.Name,
	// }); err != nil {
	// 	util.Error(err.Error())
	// }
	return htp.RespOK("", rsp.Message)
}

/*
 * 描述:上移下移
 *********************************************************************/
type SwitchPostFrameSet struct {
	Id1 int64 `form:"idOne" json:"idOne" binding:"required"` //上移
	Id2 int64 `form:"idTwo" json:"idTwo" binding:"required"` //下移
}

func (this *SwitchPostFrameSet) Handle(c *gin.Context, ctx context.Context) htp.Response {
	rsp, err := model.PostFrame.OrderPostFrame(ctx, &gpb.SwitchPostFrameReq{
		Id1: this.Id1,
		Id2: this.Id2,
	})
	if err != nil {
		return htp.RespModelErr("", err)
	}
	return htp.RespOK("", rsp.Message)
}
